package com.zcsy.manage.service.system;

import java.util.List;

import com.zcsy.manage.model.system.Menu;
import com.zcsy.manage.model.system.User;

/**
 * @Title: IMenuService.java
 * @Package： com.zcsy.manage.service 
 * @Description: 菜单服务层接口类
 *
 * @author tanghan barbadosliy@163.com
 * @Copyright: 2015 武汉中财数元信息技术有限公司 All rights reserved.
 * @date 2015年7月7日
 * @version 1.0
 * @see JDK1.7.0_75
 * @since
 */
public interface IMenuService {

	/**
	  * @Title: getMenuByState
	  * @Description: 根据菜单状态获取菜单列表
	  * 
	  *   if state =1 :获取所有启用的菜单 
	  *     else if sate = 0 :获取所有停用的菜单
	  *     else if state= -1:获取所有菜单
	  * @param state 菜单状态
	  * @return List<Menu> 菜单集合
	  * @throws none
	  */
	List<Menu> getMenuByState(Integer state);
	
	/** 
	 * @Title: getMenusByCache 
	 * @Description: 从缓存获取所有菜单
	 * @param @return     
	 * @return List<Menu>     
	 * @throws 
	 */
	List<Menu> getMenusByCache(User user , Integer type);
	
	/** 
	 * @Title: getMenusByCache 
	 * @Description: 从缓存获取所有菜单，数组形式罗列
	 * @param @return     
	 * @return List<Menu>     
	 * @throws 
	 */
	List<Menu> getMenusArrayByCache(User user,Integer type);
	
	
	/**
	  * @Title: getMenuByPId
	  * @Description: 根据父Id查询改菜单下的子菜单
	  * @param pid  父菜单Id
	  * @return List<Menu>    菜单集合
	  * @throws  none
	  */
	List<Menu> getMenuByPId(String pid , String roleId);
	
	/**
     * @Title: getMenuById
     * @Description: 根据Id查询改菜单下的子菜单
     * @param id  菜单Id
     * @return List<Menu>    菜单集合
     * @throws  none
     */
     Menu getMenuById(String id);
	
	/**
	  * @Title: insert
	  * @Description: 新增菜单方法
	  * @param record  新增对象
	  * @return int  新增结果
	  * @throws  none
	  */
	int insert(Menu record);
	
	/**
	  * @Title: updateByPrimaryKey
	  * @Description: 根据Id，更新菜单
	  * @param record  待修改对象(id不为空)
	  * @return int  新增结果
	  * @throws  none
	  */
	int updateByPrimaryKey(Menu record);
	
	/**
	 * @Title: queryByLocationURL
	 * @Description: 根据远程地址查找菜单
	 * @param locationURL
	 * @return    设定文件
	 * @throws
	 */ 
	Menu queryByLocationURL(String locationURL);
	
	/**
	 * Description: <br>
	 * 根据角色Id查询有权限的菜单列表
	 * @param roleId
	 * @return 菜单列表
	 * @see 
	 */
	List<Menu> queryMenuByRoleId(String roleId);
	
	
	/** 
	 * @Title: queryFunctionsByRoleId 
	 * @Description: 根据角色ID查询有权限的所有菜单和按钮
	 * @param @param roleId
	 * @param @return     
	 * @return List<Menu>     
	 * @throws 
	 */
	public List<Menu> queryFunctionsByRoleId(String roleId);
	
	/**
     * Description: <br>
     * 根据动态查询菜单列表
     * @param record 菜单对象
     * @return 菜单列表
     * @see 
     */
    List<Menu> queryMenu(Menu record);
    
    /**
     * Description: <br>
     * 修改菜单使用状态
     * 1，为可用，2为停用
     * Implement: <br>
     * 如果菜单下有子菜单，则所有子菜单均停用
     * @param menuId
     * @param state 
     * @see 
     */
    void updateMenuState(String menuId,int state);
    
    /** 
     * @Title: getFirstAvailableMenus 
     * @Description: 获取第一个有效的菜单
     * @param @param menus
     * @param @return     
     * @return Menu     
     * @throws 
     */
    public Menu getFirstAvailableMenus(List<Menu> menus);
    
    /**
     * 
     * @Description 获取全部菜单<br>
     * 
     * @return 
     * @author lilan 1063972142@qq.com
     * @date 2016年5月10日
     * @see
     */
    List<Menu> getAllBySystem(Integer system);
    
    /**
     * 
     * @Description 获取所有叶子菜单<br>
     * 
     * @return 
     * @author lilan 1063972142@qq.com
     * @date 2016年5月11日
     * @see
     */
    List<Menu> getAllLeaves(Integer system);
    
    int insertButton(Menu record);
    
    /** 
     * @Title: initUserFirstMenuBycell 
     * @Description: 获取并初始化用户的第一个菜单（查找小区里的可用的菜单）
     * @param @param user 用户信息
     * @param @param type 系统信息
     * @param @return     
     * @return boolean     初始化失败则说明用户在所有对应小区里一个可用菜单权限都没有
     * @throws 
     */
    boolean initUserFirstMenuBycell(User user , Integer type);
    
    /** 
     * @Title: initAdminUserFirstMenu 
     * @Description: 获取并初始化平台运营用户的第一个菜单（查找可用的菜单）
     * @param @param user 用户信息
     * @param @param type 系统信息
     * @param @return     
     * @return boolean    初始化失败则说明用户一个可用菜单权限都没有 
     * @throws 
     */
    boolean initAdminUserFirstMenu(User user , Integer type);
    
    /** 
     * @Title: updateUserFirstMenuBycell 
     * @Description: 更新用户的第一个菜单（查找小区里的可用的菜单）
     * @param @param user 用户信息
     * @param @param type 系统信息
     * @param @param cellId 选择的小区
     * @param @return     
     * @return boolean     
     * @throws 
     */
    public boolean updateUserFirstMenuBycell(User user , Integer type , String cellId);
    
    /** 
     * @Title: updateAdminUserFirstMenu 
     * @Description: 更新平台运营用户的第一个菜单（查找可用的菜单）
     * @param @param user用户信息
     * @param @param type系统信息
     * @param @param cellId选择的小区
     * @param @return     
     * @return boolean     
     * @throws 
     */
    public boolean updateAdminUserFirstMenu(User user, Integer type , String cellId);

    /** 
     * @Title: getMenusByRoleIds 
     * @Description: 根据条件获取菜单集合
     * @param @param system 系统
     * @param @param roles 角色
     * @param @return     
     * @return List<Menu>     
     * @throws 
     */
    public List<Menu> getMenusByRoleIds(Integer system , List<String> roles);
}
